// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_COMPOSITOR_TEST_TEST_LAYER_ANIMATION_DELEGATE_H_
#define UI_COMPOSITOR_TEST_TEST_LAYER_ANIMATION_DELEGATE_H_

#include "base/compiler_specific.h"
#include "cc/layers/layer.h"
#include "ui/compositor/layer_animation_delegate.h"
#include "ui/compositor/layer_threaded_animation_delegate.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/transform.h"

namespace ui {

class TestLayerThreadedAnimationDelegate
    : public LayerThreadedAnimationDelegate {
public:
    TestLayerThreadedAnimationDelegate();
    ~TestLayerThreadedAnimationDelegate() override;

    // Implementation of LayerThreadedAnimationDelegate
    void AddThreadedAnimation(scoped_ptr<cc::Animation> animation) override;
    void RemoveThreadedAnimation(int animation_id) override;
};

class TestLayerAnimationDelegate : public LayerAnimationDelegate {
public:
    TestLayerAnimationDelegate();
    explicit TestLayerAnimationDelegate(const LayerAnimationDelegate& other);
    ~TestLayerAnimationDelegate() override;

    // Implementation of LayerAnimationDelegate
    void SetBoundsFromAnimation(const gfx::Rect& bounds) override;
    void SetTransformFromAnimation(const gfx::Transform& transform) override;
    void SetOpacityFromAnimation(float opacity) override;
    void SetVisibilityFromAnimation(bool visibility) override;
    void SetBrightnessFromAnimation(float brightness) override;
    void SetGrayscaleFromAnimation(float grayscale) override;
    void SetColorFromAnimation(SkColor color) override;
    void ScheduleDrawForAnimation() override;
    const gfx::Rect& GetBoundsForAnimation() const override;
    gfx::Transform GetTransformForAnimation() const override;
    float GetOpacityForAnimation() const override;
    bool GetVisibilityForAnimation() const override;
    float GetBrightnessForAnimation() const override;
    float GetGrayscaleForAnimation() const override;
    SkColor GetColorForAnimation() const override;
    float GetDeviceScaleFactor() const override;
    LayerAnimatorCollection* GetLayerAnimatorCollection() override;
    cc::Layer* GetCcLayer() const override;
    LayerThreadedAnimationDelegate* GetThreadedAnimationDelegate() override;

private:
    void CreateCcLayer();

    TestLayerThreadedAnimationDelegate threaded_delegate_;

    gfx::Rect bounds_;
    gfx::Transform transform_;
    float opacity_;
    bool visibility_;
    float brightness_;
    float grayscale_;
    SkColor color_;
    scoped_refptr<cc::Layer> cc_layer_;

    // Allow copy and assign.
};

} // namespace ui

#endif // UI_COMPOSITOR_TEST_TEST_LAYER_ANIMATION_DELEGATE_H_
